package com.itheima.service.impl;

import com.github.pagehelper.Page;
import com.github.pagehelper.PageHelper;
import com.itheima.dto.EmpDto;
import com.itheima.dto.EmpLoginDto;
import com.itheima.mapper.EmpMapper;
import com.itheima.pojo.Emp;
import com.itheima.pojo.MyResponseResult;
import com.itheima.pojo.PageBean;
import com.itheima.service.EmpService;
import com.itheima.utils.MyJwtUtil;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.time.LocalDateTime;
import java.util.HashMap;
import java.util.Map;

@Service
public class EmpServiceImpl implements EmpService {
    @Autowired
    private EmpMapper empMapper;
    @Autowired
    private MyJwtUtil myJwtUtil;
    @Override
    public PageBean<Emp> getByPage(Integer startNum, Integer pageSize) {
        //1开启分页插件
        PageHelper.startPage(startNum,pageSize);
        //2正常的查询（对原始方法进行代理，会对原始的方法进行增强）
        //3.直接对原始方法的返回值进行强制转换（page类型对象）
        Page<Emp> emps= (Page<Emp>)empMapper.getByPage();
        //将page中的信息解析出来封装到pageBean中返回
        return new PageBean<Emp>(emps.getTotal(), emps.getResult());
    }

    @Override
    public PageBean<Emp> getByPage(Integer startNum, Integer pageSize, EmpDto empDto) {
            PageHelper.startPage(startNum,pageSize);
            Page<Emp> emps=(Page<Emp>) empMapper.getByPage2(empDto);
            return new PageBean<Emp>(emps.getTotal(), emps.getResult());
    }
    @Override
    public int deleteById(Integer[] ids) {
        return empMapper.deleteById(ids);
    }
    @Override
    public int insertEmp(Emp emp) {
        emp.setCreateTime(LocalDateTime.now());
        emp.setUpdateTime(LocalDateTime.now());
        emp.setPassword("123456");
        return empMapper.insertEmp(emp);
    }
    @Override
    public Emp getById(Integer id) {
        return empMapper.getById(id);
    }

    @Override
    public MyResponseResult<String> login(EmpLoginDto dto) {
//        1.根据用户名和密码到数据库查询
//            2.成功则生成一个令牌，并返回令牌
//                3.失败返回null
        Emp emp = empMapper.login(dto);
        if (emp == null){
            return MyResponseResult.error("NOT_LOGIN");
        }
        //TODO 生成JWT令牌
        Map<String,Object> map = new HashMap<>();
        map.put("id",emp.getId());
        map.put("name",emp.getName());
        //用工具生成Jwt令牌
        String s = myJwtUtil.creatJwt(map);
        return MyResponseResult.ok(s);
    }

    @Override
    public int delById(Integer deptid) {
        return empMapper.delByDeptId(deptid);
    }
//    @Override
//    public void upDate(Emp emp) {
//        emp.setUpdateTime(LocalDateTime.now());
//        empMapper.upDate(emp);
//    }
//没有使用分页插件的写法
//    @Autowired
//    private EmpMapper empMapper;
//    @Override
//    public PageBean<Emp> getByPage(Integer startNum, Integer pageSize) {
//        //1:由于controller传递过来的两个参数分别代表要查询的是缔结也，几每页显示的数量，因此我们需要先根据这个数算出limit的跳过条数
//        //2.使用计算好的数据调用mapper获取当前这一夜的几何数据
//        //3.调用mapper获取数据库中全部的总数据量
//        //4.将上面的两个数据封装到PageBean中并返回给controller
//        int start = (startNum-1)*pageSize;
//        List<Emp> emps = empMapper.getByPage(start, pageSize);
//        Long total = empMapper.getTotal();
//        return new PageBean<>(total,emps);
//    }
}
